// 4. 具体状态：已发货
/// <summary>
/// 具体状态类：已发货状态
/// 表示订单已经发货但尚未完成的状态
/// </summary>
public class ShippedState : OrderState
{
  /// <summary>
  /// 构造函数
  /// </summary>
  /// <param name="context">订单上下文对象</param>
  public ShippedState(OrderContext context) : base(context) { }

  /// <summary>
  /// 支付操作 - 在已发货状态下订单已经支付
  /// </summary>
  public override void Pay() => Console.WriteLine("已支付");
  
  /// <summary>
  /// 发货操作 - 在已发货状态下订单已经发货
  /// </summary>
  public override void Ship() => Console.WriteLine("已发货");
  
  /// <summary>
  /// 完成操作 - 在已发货状态下可以完成，转换到已完成状态
  /// </summary>
  public override void Complete()
  {
    Console.WriteLine("订单已完成");
    _context.SetState(new CompletedState(_context));
  }
  
  /// <summary>
  /// 取消操作 - 在已发货状态下不能取消
  /// </summary>
  public override void Cancel() => Console.WriteLine("错误：已发货不能取消");
}